void main(){
  //创造男人对象
  Man man = Man('李雷', 13);
  // 继承的属性和方法
  print(man.name);// 李雷
  man.eat(); // 李雷--eat
  // 通过mixin扩展的方法
  man.sing(man.name); // 李雷--爱唱歌

  //创建一个女人对象
  Woman woman = Woman('韩梅梅', 14);
  // 继承的属性和方法
  print(woman.name); // 韩梅梅
  woman.eat(); // 韩梅梅--eat
  // 通过mixin扩展的方法
    woman.sing(woman.name);   // 韩梅梅--爱唱歌
    woman.dance(woman.name); // 韩梅梅--爱跳舞
    woman.danceType ='街舞';  
    print(woman.danceType);  //街舞

}
// 人类:父类
class Person{
  Person(this.name,this.age);
  String? name;
  int? age;
   void eat(){
    print('$name -- eat');
   }
}
// 唱歌方法的扩展类
// mixin混入(解除耦合)
// (解耦:降低不同类之间的相互依赖关系)
mixin SingMixin{
  // 唱歌的方法
  void sing(  name){
    print('$name -- 爱唱歌');
  }
 
}
 // 跳舞方法的扩展类
  mixin DanceMixin{
    // 舞种
    String? danceType;
    // 跳舞的方法
    void dance(String? name){
      print('$name---爱跳舞');
    }
  }
  // 男人类
  // with 拼回去
  class Man extends Person with SingMixin{
    // 定义子类构造函数
    Man(super.name,super.age);
  }
  // 女人类
  class Woman extends Person with SingMixin,DanceMixin{
    // 定义子类构造函数
    Woman(super.name,super.age);
  }